<?php
class Resultado extends Zend_Db_Table
{
    protected $_name = "resultado";
    private $_idRotina;
    private $_idExame;
    private $_idResultado;
    private $_idAmostra;
    
    public function setIdRotina($id)
    {
       $this->_idRotina =  $id;
    }
    
    public function getIdRotina()
    {   
        return $this->_idRotina;
    }

    public function setIdExame($id)
    {
       $this->_idExame =  $id;
    }
    
    public function getIdExame()
    {
        return $this->_idExame;
    }

    public function setIdAmostra($id)
    {
       $this->_idAmostra =  $id;
    }
    
    public function getIdAmostra()
    {
        return $this->_idAmostra;
    }
    
    public function setIdResultado($id)
    {
       $this->_idResultado =  $id;
    }
    
    public function getIdResultado()
    {  
        return $this->_idResultado;
    }

        
    public function grid(array $request)
    {
        $dados = array();
		
	$select = $this->select()
                       ->from($this, 'COUNT(*) AS  qtd')
                       ->where('idrotina = ?',$this->_idRotina);
                 
        $result = $this->fetchRow($select);
	        
	if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
	}else{
            $total_pages = 0;
	}
		
	if($request['page'] == 1){
            $start = 0;
	}else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
	}

        $dados['total']	= $total_pages;
	$dados['page']	= $request['page'];
	$dados['records'] = $result->qtd;
        
        $select =  "SELECT DISTINCT ra.idExame, m.nome as metodologia, k.nome as kitSorologia,";
        $select .= " (SELECT e.nomeLongo FROM exame e ";
        $select .= "  WHERE ra.idExame = e.idExame) AS nome,";
        $select .= " (SELECT e.tiporesultado FROM exame e ";
        $select .= "  WHERE ra.idExame = e.idExame) AS resultado";
        $select .= " FROM rotina_amostra ra";
        $select .= " inner join metodologia m on (ra.idMetodologia = m.idMetodologia) ";
        $select .= "  inner join kitsorologia k on(ra.idKitSorologia = k.idKitSorologia) ";
        $where = $this->_db->quoteInto(" WHERE idRotina = ?", $this->_idRotina);
        $select .= $where;
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
	}else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
	}
                
        $resultado =  $this->_db->fetchAll($select);
        
        for ($cont = 0; $cont < count($resultado); $cont++)
	{
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idExame'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['nome'],
                                                    $resultado[$cont]['resultado'],
            					    $resultado[$cont]['metodologia'],
						    $resultado[$cont]['kitSorologia']
						  );
	}
	return $dados;
    }
        
    public function subgrid(array $request)
    {
        $dados = array();
		
	$select = $this->select()
                       ->from($this, 'COUNT(*) AS  qtd')
                       ->where('idExame = ?',$this->_idExame)                                
                       ->where('idrotina = ?',$this->_idRotina);
        
        $result = $this->fetchRow($select);	
        
	if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
	}else{
            $total_pages = 0;
	}
		
	if($request['page'] == 1){
            $start = 0;
	}else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
	}

	$dados['total']	= $total_pages;
	$dados['page']	= $request['page'];
	$dados['records'] = $result->qtd;

	$select =  " SELECT r.idResultado, ra.idAmostra, a.inicial, ";
        $select .=  "  CASE r.resposta";
	$select .=  " WHEN 'P' Then 'REAGENTE'";
	$select .=  " WHEN 'N' Then 'NÃO REAGENTE'";
	$select .=  " WHEN 'I' Then 'INDETERMINADO'";
	$select .=  " WHEN 'R' Then 'REPETIÇÃO'";
	$select .=  " END AS resposta,";
	$select .=  " r.valor1, r.valor2";
	$select .=  " FROM rotina_amostra ra";
	$select .=  " LEFT JOIN resultado r ON (ra.idAmostra = r.idAmostra AND ra.idRotina = r.idRotina AND ra.idExame = r.idExame)";
        $select .=  " INNER JOIN amostra a ON (ra.idAmostra = a.idAmostra)";
	$where = $this->_db->quoteInto(" WHERE ra.idExame = ?", $this->_idExame);
        $and   = $this->_db->quoteInto(" AND ra.idRotina = ?", $this->_idRotina);
        $select .= $where;
        $select .= $and;
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
	}else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
	} 
                
        $resultado =  $this->_db->fetchAll($select);
             
        for ($cont = 0; $cont < count($resultado); $cont++)
	{
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idResultado'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['idAmostra'],
                                                    $resultado[$cont]['inicial'],
                                                    $resultado[$cont]['resposta'],
                                                    $resultado[$cont]['valor1'],
                                                    $resultado[$cont]['valor2']
                                                  );
	}
	return $dados;
    }
        
    public function subGridEdit(array $request, $usuario)
    {
        $dados = array(
            'Resposta' => $request['resposta'],
            'valor1' => $request['valor1'],
            'valor2' => $request['valor2'],
            'idUsuAtu' => $usuario
        );
        $where = $this->getAdapter()->quoteInto("idResultado = ?", $request['id']);
        return $this->update($dados, $where);
    }
    
    public function del($usuario)
    {
        $dados = array(
            'Resposta' => " ",
            'valor1' => " ",
            'valor2' => " ",
            'idUsuAtu' => $usuario
        );
        $where = $this->getAdapter()->quoteInto("idRotina = ?", $this->_idRotina);
        $resultado = $this->update($dados, $where);
        return $resultado;
    }
    
    public function vrfcResultado($id)
    {            
        $select = $this->select()
                ->from($this,'count(idResultado) as qt')
                ->where('idRotina = ?', $id);
        
        $resultado = $this->fetchRow($select);
            
        $qtd = $resultado->qt;
        if($resultado->qt > 0)
            return 1;
        else
            return 0;
    }
    
    public function manual($idRotina, $usuario)
    {   
        $retorno = true;
        try {
            print_r($idRotina);
            print_r($usuario);
            
            $this->_db->beginTransaction();
            $this->_db->query("call dbwebsor.InsereResultadoManual(?,?, @retorno)", array($idRotina, $usuario));
            $this->_db->commit();
            
        } catch (Zend_Exception $exc) {
            $this->_db->rollBack();
            echo $exc->getMessage();
            $retorno = false;
        }

        return $retorno;
    }
    
    public function getResultadoExames(array $request)
    {
        $dados = array();

	$select = $this->select()
                       ->from($this, 'COUNT(*) AS  qtd')
                       ->where('idAmostra = ?',$this->_idAmostra);
        
        $result = $this->fetchRow($select);
	
        if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
	}else{
            $total_pages = 0;
	}
		
	if($request['page'] == 1){
            $start = 0;
	}else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
	}

        $dados['total']	= $total_pages;
	$dados['page']	= $request['page'];
	$dados['records'] = $result->qtd;
        
        $select =  "SELECT DISTINCT re.idExame, e.nomeLongo as exame,";
        $select .= " CASE re.resposta";
	$select .= " WHEN 'P' THEN 'REAGENTE'";
	$select .= " WHEN 'N' THEN 'NÃO REAGENTE'";
	$select .= " WHEN 'I' THEN 'INDETERMINADO'";
	$select .= " WHEN 'R' THEN 'REPETIÇÃO'";
	$select .= " END AS resposta,";
        $select .= " re.valor1, re.valor2";
	$select .= " FROM resultado re ";
	$select .= " INNER JOIN exame e ON (e.idExame = re.idExame)";
        $where = $this->_db->quoteInto(" WHERE re.idAmostra = ?", $this->_idAmostra);
        $select .= $where;
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
	}else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
	}
        
        $resultado =  $this->_db->fetchAll($select);
        
        for ($cont = 0; $cont < count($resultado); $cont++)
	{
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idExame'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['exame'],
            					    $resultado[$cont]['resposta'],
                                                    $resultado[$cont]['valor1'],
                                                    $resultado[$cont]['valor2']
						  );
	}
	return $dados;
    }
    
    public function delAmostra($idAmostra)
    {
        $where = $this->_db->quoteInto("idAmostra = ?", $idAmostra);
	return $this->delete($where);  
    }
    
    public function vrfcAmostra($idResultado)
    {            
        $select = $this->select()
                ->from($this,'count(idResultado) as qt')
                ->where('idResultado = ?', $idResultado)
                ->where('resposta <> " "');
        
        $resultado = $this->fetchRow($select);
            
        $qtd = $resultado->qt;
        
        if($qtd > 0)
            return 1;
        else
            return 0;
    }
    
    public function vrfcResSemResp($idRotina)
    {  
        $retorno = 0;
        $select = "SELECT t1.qtd AS RESPOSTA, t2.qtd AS QTD, CASE WHEN t1.qtd = t2.qtd THEN 'IGUAL'";
        $select .= " ELSE 'DIFERENTE' END VALOR FROM";
        $select .= " (SELECT DISTINCT COUNT(idResultado) AS qtd FROM Resultado WHERE resposta <> ' '";
        $select .= $this->getAdapter()->quoteInto(" AND idRotina = ?)t1,", $idRotina);
        $select .= " (SELECT COUNT(idResultado) AS qtd FROM Resultado";
        $select .= $this->getAdapter()->quoteInto(" WHERE idRotina = ?)t2", $idRotina);

        $resultado = $this->_db->fetchAll($select);
        
        if($resultado[0]['QTD'] == 0){
            $retorno = 1;
        }
        else if(($resultado[0]['RESPOSTA'] == 0) && ($resultado[0]['QTD'] != 0)){
            $retorno = 3;
        }
        else if($resultado[0]['VALOR'] != 'IGUAL'){
            $retorno = 2;
        }
        
        return $retorno;
    }
    
    public function delResultado($idResultado)
    {
        $select = $this->select()
                ->from($this, array ('idAmostra', 'idExame'))
                ->where('idResultado = ?', $idResultado);
        $resultado = $this->fetchRow($select);
      
        $where = $this->_db->quoteInto("idResultado = ?", $idResultado);
	$this->delete($where);
        
        return $resultado;
    }
    
    public function deletarResultado($idRotina)
    {
        $retorno = true;
        $select = $this->select()
                       ->from($this,'idResultado')
                       ->where('idRotina = ?', $idRotina);
               
        
        $res = $this->fetchAll($select)->toArray();
        if($res != 0)
        {        
            for ($cont = 0; $cont < count($res); $cont++)
            {
                $where = $this->getAdapter()->quoteInto("idResultado = ?", $res[$cont]['idResultado']);
                $resultado = $this->delete($where);
                if($resultado == 0)
                    $retorno = false;
            }
        }
        return $retorno;
    }
    
   public function salvarregistro(array $dados )
    {
       $this->_db->beginTransaction();
       try {
            $this->idResultado = $this->insert($dados);
            $this->_db->commit();
           return $this->idResultado;	     
       } catch (Exception $exc) {
           echo $exc->getMessage();
           $this->_db->rollBack();
           return 0;
       }

      
    }
    public function delResultadoAmostra($idRotina, $idAmostra, $idExame)
    {
        
        
        $where  = $this->_db->quoteInto("  idRotina = ?", $idRotina);
        $where  .= $this->_db->quoteInto(" and idAmostra = ?", $idAmostra);
        $where  .= $this->_db->quoteInto(" and idExame = ?", $idExame);
        
	
        
        return $this->delete($where);
    }
    
    public function vrfcAmoResultado($idRotina, $idExame, $idAmostra)
    {
        $select = $this->select()
                ->from($this,'count(idResultado) as qt')
                ->where('resposta <> " "')
                ->where('idRotina = ?', $idRotina)
                ->where('idExame = ?', $idExame)
                ->where('idAmostra = ?', $idAmostra);
        
        $resultado = $this->fetchRow($select);
            
        $qtd = $resultado->qt;
        if($resultado->qt > 0)
            return 1;
        else
            return 0;
    }
    
}    

?>
